Repository navigation
Conversation
A kit scaffolded today installed whatever engine was current when create-threenative was last published, because every template pinned the workspace version exactly. A lib patch reached new projects only after a full CLI repack, and there was no way to publish the two together. Templates now ship `>=0.3.13` for `@threenative/*` and keep create-threenative exact: pnpm resolves the newest published engine at install, so a release never has to touch a template again. A game already scaffolded stays frozen by its own pnpm-lock.yaml. - scripts/version-range.ts owns the specifier form; the pin gate, the release preflight and the release's pin writer all read it. - assertEnginePair accepts any core at or after the paired release instead of exact equality, so a newer core is no longer a refusal on a correct install. assertMcpShims and the engine's tn_version_handshake still fail closed on a pair that cannot work. - check-publish-state resolves a range's floor, the release the kit was tested against, instead of handing the registry an unreadable range.
Contributor
Author
|
Content is on main as e64ab4a (direct push at owner's request). develop catches up on the next promotion merge. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Every starter kit pinned the engine exactly (
"@threenative/core": "0.3.13"). Templates ship insidecreate-threenative, so the only way a kit ever got a newer engine was a full CLI repack — a lib patch published today reached new projects only after the next CLI release. Owner's ask: "I just want to make sure I don't need to care about updating starter kits or sandbox shit anymore; when a user installs it, it gets the latest."Change
">=0.3.13"for@threenative/*(open floor, no ceiling — a 0.4.0 also lands in new projects without a repack), and keepcreate-threenativeexact.pnpm-lock.yaml; only new scaffolds float.scripts/version-range.tsowns the specifier form. The pin gate, the release preflight, the release pin writer and the publish-state registry check all read it.assertEnginePairnow accepts any core at or after the paired release (src/core-pair.ts) instead of exact equality, so a newer engine is no longer a refusal on a correct fresh install.assertMcpShimsand the engine'stn_version_handshakestill fail closed on a pair that cannot work.check-publish-stateresolves a range's floor (the release the kit was tested against) instead of handing the registry an unreadable range.Generated project after this change:
Sandbox
pnpm sandboxand CI'sscaffold-from-tarballssubstitute tarballs by package name, so the specifier never reaches the resolver there — sandbox games were already current. New sandbox games inherit the same floors.Verification
pnpm typecheckclean.scripts/__tests__/{version-range,check-version-pins,release,check-publish-state,prepare-release,typescript-toolchain}.spec.ts,packages/create-threenative/__tests__/{core-pair,doctor-fix,doctor,engine-catalog-plugin,playtest}.spec.ts.tsx scripts/check-version-pins.tspasses.createProject({ install: false, template: "starter" })emits the block above.pnpm scaffold:pinre-pinned 16 kits; onlykitmoved, everysharedhash is unchanged, i.e. the diff is exactly the manifest.ci:fast: agents, docs, lint, drift all pass.Not run here: full
pnpm test, playtests,pnpm publish:check(network).Known ceiling
Within an open floor a bad patch reaches new projects without waiting for a CLI release; the mitigation is
npm deprecateon the bad version, which reaches every game. Existing games are protected by their lockfile.